Indexación y asociación

Introducción

Un índice es un tipo de lista que contiene elementos que nos llevan de manera directa a la ubicación de otros elementos.

Cada vez que ejecutamos una consulta, la base de datos busca todas las filas de su tabla para encontrar las que coincidan con la solicitud. A medida que crecen las tablas de la base de datos, es necesario inspeccionar un número mayor de filas que a su vez, disminuye el rendimiento general de la base de datos y, respectivamente, de la aplicación.

Los índices de MySQL resuelven este problema tomando datos de una columna en su tabla y almacenándolos alfabéticamente en una ubicación separada llamada índice.

En bases de datos, un índice es una estructura de datos formada por dos campos:

Los índices en bases de datos nos permiten reducir el tiempo de búsqueda y el acceso a los datos.

Los índices mantienen una referencia a la posición exacta donde se encuentra un dato.

 

Clave de búsqueda
Puntero
1
0x0262b3c3
2
0xb5b49aab
8121712
0x151d31d5
Ejemplo de estructura de datos de indices

 

Existen diferentes técnicas de indexación y asociación pero ninguna es mejor que la otra, pues todo depende del tipo de aplicación que se esté utilizando. Cada técnica se puede analizar atendiendo a los siguientes criterios:

 

Es necesario definir bien sobre qué columna o columnas se necesita un índice para poder ser eficientes en la relación entre tiempo de acceso, coste y almacenamiento.

(Where´s y Joins)

 

 

Tipos de índices

Índices ordenados

Almacenan datos ordenados en función del valor de la clave de búsqueda.

Se pueden clasificar de dos formas:

 

Índices asociados

Función hash

Una función hash es un algoritmo matemático que transforma un dato en otro unidireccionalmente.

Las mismas entradas siempre devuelven las mismas salidas, ya que no es un proceso aleatorio.

Es irreversible.

 

Esquema_funciones_hash

 

Los registros se almacenan uniformemente a lo largo de cajones utilizando una función de asociación (hash sobre uno o varios atributos). Podríamos decir que es como una lista de listas.

No hay ningún tipo de ordenación en base al valor, como si ocurre en los índices ordenados.

Definiciones:

 

Indices_asociados

 

Almacenamiento de índices

Los índices pueden estar almacenados en RAM o en disco, todo dependerá del uso que le demos a esos índices.

Hay SGBD que son capaces de mover los índices de uno a otro sitio dependiendo de su uso, así que si un índice es muy utilizado, lo moverá a RAM, y por el contrario, si no se usa desde hace tiempo, lo devolverá a disco.

 

Índices multinivel

Cuando nuestro índice es excesivamente grande, queremos que al menos una parte de este se encuentre en memoria para agilizar el acceso.

Los índices multinivel buscan reducir el espacio que pueden ocupar los índices grandes y así poder tener una parte del índice en memoria (normalmente índice disperso) y el resto en disco (disperso, denso o asociativo).

Al utilizar dos niveles de indexación y manteniendo el índice más externo en la memoria principal mejora el tiempo de búsqueda. Si el índice externo crece demasiado y no cabe en la memoria principal, se podría repetir el proceso, volviendo a crear otro índice más externo.

 

Indices_multinivel

 

El proceso de búsqueda se divide en dos:

 

Actualización del índice

Independientemente del tipo de índice que estemos utilizando, estos deben actualizarse siempre que se inserte o borre un registro.

La actualización de los índices impone un tiempo adicional en la modificación de los datos de la base de datos.

Borrado

 

Inserción

En primer lugar se realiza una búsqueda usando el valor de clave de búsqueda del registro a insertar. Las tareas a realizar dependen del tipo de índice:

 

by Jose Manuel Pinillos